import { Configuration, PopupRequest } from '@azure/msal-browser';

// 获取环境变量
const clientId = import.meta.env.VITE_MS_365_CLIENT_ID as string;
const tenantId = import.meta.env.VITE_MS_365_TENANT_ID as string;

// 获取重定向URI - 根据实际运行环境调整端口
const redirectUri = import.meta.env.VITE_API_BASE_URL + '/auth/ms-365-auth/callback';

console.log('🔧 MSAL配置信息:', {
  clientId: clientId ? '已设置' : '未设置',
  tenantId: tenantId ? '已设置' : '未设置',
  response_mode: 'form_post',
  redirectUri,
  origin: window.location.origin,
  port: window.location.port
});

// MSAL配置
export const msalConfig: Configuration = {
  auth: {
    clientId: clientId,
    authority: `https://login.microsoftonline.com/${tenantId}`,
    redirectUri: redirectUri,
    navigateToLoginRequestUrl: false, // 防止自动跳转到登录请求URL
    clientCapabilities: ['CP1'], // 启用客户端功能
  },
  cache: {
    cacheLocation: 'sessionStorage', // 使用sessionStorage存储
    storeAuthStateInCookie: false, // 不在cookie中存储认证状态
  },
  system: {
    loggerOptions: {
      loggerCallback: (level: any, message: string, containsPii: boolean) => {
        if (containsPii) {
          return;
        }
        switch (level) {
          case 0:
            console.error('❌ MSAL:', message);
            return;
          case 1:
            console.warn('⚠️ MSAL:', message);
            return;
          case 2:
            console.info('ℹ️ MSAL:', message);
            return;
          case 3:
            console.debug('🔍 MSAL:', message);
            return;
          default:
            console.log('📝 MSAL:', message);
            return;
        }
      },
      logLevel: 3, // Info
    },
    allowRedirectInIframe: true, // 允许在iframe中重定向
    windowHashTimeout: 60000, // 增加窗口哈希超时时间
    iframeHashTimeout: 6000, // 增加iframe哈希超时时间
  },
};

// 登录请求配置
export const loginRequest: PopupRequest = {
  scopes: ['openid', 'profile', 'email', 'User.Read', 'offline_access'], // 添加必要的scope，包括offline_access
  prompt: 'login', // 允许用户选择账户
};

// 使用form_post响应模式的登录请求
export const loginRequestWithFormPost = {
  ...loginRequest,
  responseMode: 'form_post' as const, // 使用form_post响应模式，推荐用于机密客户端
};

// 登出请求配置
export const logoutRequest = {
  postLogoutRedirectUri: window.location.origin,
}; 